﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Logic.Linq;
using System.Configuration;
using Crosland.Automotriz.Entidad;
using Crosland.Automotriz.Seguridad.Business;
using Crosland.Automotriz.Seguridad.Entity;
using System.Net.Mail;
using DevExpress.Web.ASPxUploadControl;
using System.IO;
using Crosland.Automotriz.Logic.Funciones;

namespace Crosland.Automotriz.Web.Vehiculos
{
    public partial class wFrmVentaExterna : System.Web.UI.Page
    {
        string idNegocio = ConfigurationManager.AppSettings["Negocio"];
        const string script = "MostrarAlerta();";
        const string script2 = "MostrarMensaje();";

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack == false) 
            {
                ListaAnio();
                ListarTipoDescuento();
                ListarVentas();
                ListarMoneda();
                cboMoneda.Enabled = false;
                deFechaVentaPublico.Value = null;
                deFechaVentaPublico.Text = "";
                Panel img = (Panel)Master.FindControl("asp");
                img.Visible = false;
            }
        }

        void ListaAnio() 
        {
            clsTH_VentaBL da = new clsTH_VentaBL();
            IEnumerable<object> años;
            años = da.AniosFactura();
            cboAnio_Ini.DataSource = años;
            cboAnio_Ini.TextField = "anio";
            cboAnio_Ini.ValueField = "anio";
            cboAnio_Ini.DataBind();
            cboAnio_Ini.Value = DateTime.Now.Year.ToString();
            cboMes_Ini.Value = DateTime.Now.Month.ToString();



            cboAnio_Fin.DataSource = años;
            cboAnio_Fin.TextField = "anio";
            cboAnio_Fin.ValueField = "anio";
            cboAnio_Fin.DataBind();
            cboAnio_Fin.Value=DateTime.Now.AddDays(+60).Year.ToString();
            cboMes_Fin.Value= DateTime.Now.AddMonths(1).Month.ToString();
        }


        private void ListaTipoRuedas() { 
          clsTH_VentaExternaBL da = new clsTH_VentaExternaBL();
          cboTipoRueda.DataSource = da.ListaTipoRuedas();
          cboTipoRueda.ValueField = "TIP_NUM_RUEDA";
          cboTipoRueda.TextField = "TIP_NUM_RUEDA";
          cboTipoRueda.DataBind();
          cboTipoRueda.Value = "3R";
        
        }

        void ListarTipoDescuento()
        {
            clsT_Mae_Tabla_General_DetBL bl = new clsT_Mae_Tabla_General_DetBL();
            cboTipoTransformacion.DataSource = bl.Listar("T_MAE_TIPO_TRANSFORMACION", 2);
            cboTipoTransformacion.TextField = "DES_LARGA";
            cboTipoTransformacion.ValueField = "ID_GENERAL_DET";
            cboTipoTransformacion.DataBind();
            cboTipoTransformacion.SelectedIndex = 0;
        }

        void ListarVentas() 
        {
            String strMesIni = LeftRightMid.Right("00" + Convert.ToString(cboMes_Ini.Value), 2);
            String strMeFin = LeftRightMid.Right("00" + Convert.ToString(cboMes_Fin.Value), 2);
            String strAnioMesIni = cboAnio_Ini.Value.ToString() + "" + strMesIni;          
            String strAnioMesFin = cboAnio_Fin.Value.ToString() +""+ strMeFin;
            string idUsuario = Session["User"].ToString();

            clsTH_VentaExternaBL neg = new clsTH_VentaExternaBL();
            gv.DataSource = neg.ListarVenta(strAnioMesIni,strAnioMesFin, idUsuario);
            gv.DataBind();
        }

        void ListarMoneda() 
        {
            clsT_Mae_MonedaLogic neg = new clsT_Mae_MonedaLogic();
            cboMoneda.DataSource = neg.Listar();
            cboMoneda.TextField = "NOM_MONEDA";
            cboMoneda.ValueField = "ID_MONEDA";
            cboMoneda.DataBind();
        }

        void ListarVehiculos() 
        {
            string VIN = txtVIN.Text;
            string id_usuario = Session["User"].ToString();
            String TipoNro_Rueda = cboTipoRueda==null?"3R":cboTipoRueda.Value.ToString();           

            clsTH_VentaExternaBL bl = new clsTH_VentaExternaBL();
            gvVehiculo.DataSource = bl.Listar_x_NROVIN(3, id_usuario, TipoNro_Rueda, VIN);
             gvVehiculo.DataBind();     
        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Repuestos/wFrmDefault.aspx?id=" + idNegocio);
        }

        protected void btnBuscarVehiculo_Click(object sender, EventArgs e)
        {


            if (txtVIN.Text.Length >= 5)
            {
                ListarVehiculos();
                lblMensajeVehiculo.Text = "";
            }
            else
            {
                lblMensaje.Text = "Ingrese los últimos 5 dígitos del VIN.";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
            }
            
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            int indice = gvVehiculo.FocusedRowIndex;
            if (indice >= 0)
            {
                int ID_ORG_VTA = int.Parse(gvVehiculo.GetRowValues(indice, "ID_ORG_VTA").ToString());
                int NRO_FACTURA = int.Parse(gvVehiculo.GetRowValues(indice, "NRO_FACTURA").ToString());
                int NRO_POSICION = int.Parse(gvVehiculo.GetRowValues(indice, "NRO_POSICION").ToString());

                if (txtNombreCliente.Text == "")
                {
                    lblMensaje.Text = "Debe ingresar el nombre del cliente.";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                    //lblMensajeVehiculo.Text = "Debe ingresar el nombre del cliente.";
                    txtNombreCliente.Focus();
                    return;
                }
                if (txtRuc.Text == "")
                {
                    lblMensaje.Text = "Debe ingresar el número del DNI/RUC.";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                    //lblMensajeVehiculo.Text = "Debe ingresar el número del DNI/RUC.";
                    txtRuc.Focus();
                    return;
                }
                if (sePrecioTotal.Value.ToString() == "0" || Convert.ToInt32(sePrecioTotal.Value) < 0)
                {
                    lblMensaje.Text = "Debe ingresar el Precio Total.";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                    //lblMensajeVehiculo.Text = "Debe ingresar el Precio Total.";
                    sePrecioTotal.Focus();
                    return;
                }
                try
                {
                    TH_VENTA_EXTERNA entidad = new TH_VENTA_EXTERNA();
                    clsTH_VentaExternaBL negocio = new clsTH_VentaExternaBL();
                    int ID_VENTA_EXTERNA = negocio.UltimoID() + 1;
                    entidad.ID_VENTA_EXTERNA = ID_VENTA_EXTERNA;
                    entidad.ID_ORG_VTA = ID_ORG_VTA;
                    entidad.NRO_FACTURA = NRO_FACTURA;
                    entidad.NRO_POSICION = NRO_POSICION;
                    entidad.FEC_VTA_PUBLICO = DateTime.Parse(deFechaVentaPublico.Value.ToString());
                    entidad.FEC_REGISTRO = DateTime.Now;
                    entidad.FEC_SOLICITUD = null;
                    entidad.FEC_APROBACION = null;
                    entidad.ID_ESTADO = 41;//Pendiente de Aprobar
                    entidad.ID_USUARIO_REGISTRO = Session["User"].ToString();
                    entidad.ID_USUARIO_SOLICITUD = null;
                    entidad.ID_USUARIO_APROBACION = null;
                    entidad.DES_OBS_SOLICITUD = "";
                    entidad.DES_OBS_APROBACION = "";
                    entidad.DES_CLIENTE_FINAL = txtNombreCliente.Text.Trim().ToUpper();
                    entidad.NIF_CLIENTE_FINAL = txtRuc.Text.Trim();
                    entidad.ID_TIPO_TRANSFORMACION = int.Parse(cboTipoTransformacion.Value.ToString());
                    entidad.ID_TIPO_COMPROBANTE = int.Parse(rblTipoComprobante.SelectedItem.Value);
                    entidad.NRO_SERIE = txtSerieComprobante.Text.Trim();
                    entidad.NRO_COMPROBANTE = txtNumeroComprobante.Text.Trim();
                    entidad.IMP_TOTAL_VTA = decimal.Parse(sePrecioTotal.Value.ToString());
                    decimal total = decimal.Parse(sePrecioTotal.Value.ToString());
                    decimal subtotal = total / decimal.Parse("1.18");
                    decimal igv = subtotal * 18 / 100;

                    entidad.IMP_VALOR_VTA = subtotal;
                    entidad.IMP_IGV_VTA = igv;

                    entidad.ID_TIEMPO_VTA_FINAL = int.Parse(DateTime.Parse(deFechaVentaPublico.Value.ToString()).Year.ToString("0000") + DateTime.Parse(deFechaVentaPublico.Value.ToString()).Month.ToString("00") + DateTime.Parse(deFechaVentaPublico.Value.ToString()).Day.ToString("00"));
                    entidad.ID_MONEDA = int.Parse(cboMoneda.Value.ToString());
                    negocio.Insertar(entidad);

                    //Cambiar archivos de directorio
                    string rutaTemporal = "~/Archivos Imagen/VentaExterna/temp/";
                    string rutaNueva = "~/Archivos Imagen/VentaExterna/" + ID_VENTA_EXTERNA.ToString() + "/";

                    string rutaNuevaFisica = Server.MapPath(rutaNueva);
                    string rutaTemporalFisica = Server.MapPath(rutaTemporal);

                    var lista = Directory.EnumerateFiles(rutaTemporalFisica);

                    if (!File.Exists(rutaTemporalFisica))
                    {
                        Directory.CreateDirectory(rutaTemporalFisica);
                    }

                    if (!File.Exists(rutaNuevaFisica))
                    {
                        Directory.CreateDirectory(rutaNuevaFisica);
                    }

                    string archivoOrigen;
                    foreach (string item in lista)
                    {
                        string fileName = item.Substring(rutaTemporalFisica.Length);
                        archivoOrigen = item.ToString();

                        File.Move(item, Path.Combine(rutaNuevaFisica, fileName));
                        File.Delete(archivoOrigen);

                        //Registrar Detalle
                        clsTH_VentaExterna_ArchivoBL negocioArchivo = new clsTH_VentaExterna_ArchivoBL();
                        TH_VENTA_EXTERNA_ARCHIVO entidadArchivo = new TH_VENTA_EXTERNA_ARCHIVO();
                        int ID_VENTA_EXTERNA_ARCHIVO = negocioArchivo.UltimoID() + 1;
                        entidadArchivo.ID_VENTA_EXTERNA_ARCHIVO = ID_VENTA_EXTERNA_ARCHIVO;
                        entidadArchivo.ID_VENTA_EXTERNA = ID_VENTA_EXTERNA;
                        entidadArchivo.DES_RUTA_ARCHIVO = rutaNueva + fileName;
                        negocioArchivo.Insertar(entidadArchivo);
                    }


                    lblMensajeVehiculo.Text = "Venta Registrada Satisfactoriamente.";
                    lblMensajeVehiculo.ForeColor = System.Drawing.Color.DarkBlue;

                    lblMensajeExito.Text = "Venta Registrada Satisfactoriamente.";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script2, true);

                    btnGrabar.Enabled = false;
                    txtVIN.Enabled = false;
                    deFechaVentaPublico.Enabled = false;
                    rblTipoComprobante.Enabled = false;
                    txtSerieComprobante.Enabled = false;
                    txtNumeroComprobante.Enabled = false;
                    txtNombreCliente.Enabled = false;
                    txtRuc.Enabled = false;
                    cboTipoTransformacion.Enabled = false;
                    sePrecioTotal.Enabled = false;
                    btnBuscarVehiculo.Enabled = false;
                    //cboAñoVehiculo.Enabled = false;
                    //cboMesVehiculo.Enabled = false;
                    cboMoneda.Enabled = false;
                    gvVehiculo.Enabled = false;

                    ListarVentas();
                    btnNuevo.Enabled = true;
                    btnExportar.Enabled = true;
                    btnSalir.Enabled = true;
                    Uploader1.Visible = false;

                }
                catch (Exception ex)
                {
                    lblMensajeVehiculo.Text = ex.Message;
                }

            }
            else
            {
                lblMensaje.Text = "Debe seleccionar un vehiculo.";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
            }
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            ListarVentas();
        }

        protected void btnExportar_Click(object sender, EventArgs e)
        {
            ListarVentas();
            ASPxGridViewExporter1.WriteXlsxToResponse();
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            ListaTipoRuedas();
            gvVehiculo.DataSource=null;
            gvVehiculo.DataBind();
            //ListarVehiculos();
            pcNuevo.ShowOnPageLoad = true;
            btnGrabar.Enabled = true;
            txtVIN.Enabled = true;
            deFechaVentaPublico.Enabled = true;
            rblTipoComprobante.Enabled = true;
            txtSerieComprobante.Enabled = true;
            txtNumeroComprobante.Enabled = true;
            txtNombreCliente.Enabled = true;
            txtRuc.Enabled = true;
            cboTipoTransformacion.Enabled = true;
            sePrecioTotal.Enabled = true;
            btnBuscarVehiculo.Enabled = true;
            deFechaVentaPublico.Value = DateTime.Now;
            rblTipoComprobante.SelectedIndex = 0;
            txtSerieComprobante.Text = "";
            txtNumeroComprobante.Text = "";
            txtNombreCliente.Text = "";
            txtRuc.Text = "";
            cboTipoTransformacion.SelectedIndex = 0;
            cboMoneda.SelectedIndex = 1;
            cboMoneda_SelectedIndexChanged(null, null);
            sePrecioTotal.Value = 0;
            lblMensajeVehiculo.Text = "";
            txtVIN.Text = "";
           // cboAñoVehiculo.Enabled = true;
            //cboMesVehiculo.Enabled = true;
            gvVehiculo.Enabled = true;
            //cboMoneda.Enabled = true;
            Uploader1.Visible = true;
           
            txtVIN.Focus();
            btnNuevo.Enabled = false;
            btnExportar.Enabled = false;
            btnSalir.Enabled = false;
            Session["ID_VENTA_EXTERNA"] = "";
        }

        protected void cboMoneda_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboMoneda.Value.ToString() == "2")
            {
                Label34.Text = "Precio Total (US$):";
            }
            else if (cboMoneda.Value.ToString() == "1")
            {
                Label34.Text = "Precio Total (S/.):";
            }
        }
        
        protected void btnSalirPopup_Click(object sender, EventArgs e)
        {
            lblImagenes.Text = String.Empty;
            pcNuevo.ShowOnPageLoad = false;
            btnNuevo.Enabled = true;
            btnExportar.Enabled = true;
            btnSalir.Enabled = true;
        }

        protected void btnVerDetalle_Click(object sender, EventArgs e)
        {
            try
            {
                int indice = gv.FocusedRowIndex;
                if (indice >= 0)
                {
                    string VIN = gv.GetRowValues(indice, "NRO_VIN").ToString();
                    clsTH_VentaExternaBL bl = new clsTH_VentaExternaBL();
                    TD_VEHICULO veh = new TD_VEHICULO();
                    veh = bl.ListarVehiculoxVIN(3,VIN);
                    if (veh != null)
                    {
                        if (string.IsNullOrEmpty(veh.DES_MARCA)) { lblMarca.Text = ""; } else { lblMarca.Text = veh.DES_MARCA; }
                        if (string.IsNullOrEmpty(veh.DES_MODELO)) { lblModelo.Text = ""; } else { lblModelo.Text = veh.DES_MODELO; }
                        if (string.IsNullOrEmpty(veh.NRO_MOTOR)) { lblNroMotor.Text = ""; } else { lblNroMotor.Text = veh.NRO_MOTOR; }
                        if (string.IsNullOrEmpty(veh.ANIO_FAB_VEHICULO)) { lblAnioFabricacion.Text = ""; } else { lblAnioFabricacion.Text = veh.ANIO_FAB_VEHICULO; }
                        if (string.IsNullOrEmpty(veh.DES_COLOR)) { lblColor.Text = ""; } else { lblColor.Text = veh.DES_COLOR; }
                        if (string.IsNullOrEmpty(veh.ASIENTOS.ToString())) { lblAsientos.Text = ""; } else { lblAsientos.Text = veh.ASIENTOS.ToString(); }
                        if (string.IsNullOrEmpty(veh.RUEDAS)) { lblNroRuedas.Text = ""; } else { lblNroRuedas.Text = veh.RUEDAS; }
                        if (string.IsNullOrEmpty(veh.LONGITUD.ToString())) { lblLongitud.Text = ""; } else { lblLongitud.Text = veh.LONGITUD.ToString(); }
                        if (string.IsNullOrEmpty(veh.ANCHO.ToString())) { lblAncho.Text = ""; } else { lblAncho.Text = veh.ANCHO.ToString(); }
                        if (string.IsNullOrEmpty(veh.ALTURA.ToString())) { lblAltura.Text = ""; } else { lblAltura.Text = veh.ALTURA.ToString(); }
                        if (string.IsNullOrEmpty(veh.COMBUSTIBLE)) { lblCombustible.Text = ""; } else { lblCombustible.Text = veh.COMBUSTIBLE; }
                        if (string.IsNullOrEmpty(veh.PESO_BRUTO.ToString())) { lblPesoBruto.Text = ""; } else { lblPesoBruto.Text = veh.PESO_BRUTO.ToString(); }
                        if (string.IsNullOrEmpty(veh.PESO_NETO.ToString())) { lblPesoNeto.Text = ""; } else { lblPesoNeto.Text = veh.PESO_NETO.ToString(); }
                        if (string.IsNullOrEmpty(veh.NRO_CILINDRO)) { lblNroCilindros.Text = ""; } else { lblNroCilindros.Text = veh.NRO_CILINDRO; }
                        pcDatosVehiculo.ShowOnPageLoad = true;

                        int ID_VENTA_EXTERNA = int.Parse(gv.GetRowValues(indice, "ID_VENTA_EXTERNA").ToString());
                        clsTH_VentaExterna_ArchivoBL negocioArchivo = new clsTH_VentaExterna_ArchivoBL();
                        dvFotos.DataSource = negocioArchivo.ListarArchivos(ID_VENTA_EXTERNA);
                        dvFotos.DataBind();
                    }
                }
                else
                {
                    lblMensaje.Text = "Debe seleccionar una venta.";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                }
            }
            catch (Exception ex)
            {
                lblMensaje.Text = ex.Message;
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
            }
        }

        protected void Uploader1_FileUploaded(object sender, CuteWebUI.UploaderEventArgs args)
        {
            string LaRuta = "~/Archivos Imagen/VentaExterna/temp/";
            string UploadDirectory = Server.MapPath(LaRuta);
            string NuevaCarpeta = UploadDirectory;

            if (!File.Exists(NuevaCarpeta))
            {
                Directory.CreateDirectory(NuevaCarpeta);
            }

            string Nombre = args.FileName;

            byte[] file = null;
            byte[] bytes = Tools.ReadToEnd(args.OpenStream());
            if (args.FileSize > 1024 * 0.3)
            {
                file = Tools.ResizeImageFile(bytes, 500, 400);
            }
            else file = bytes;

            File.WriteAllBytes(UploadDirectory + Nombre, file);
            lblImagenes.Text = lblImagenes.Text + Nombre + "<br />";
        }

        protected void btnVerReporte_Click(object sender, EventArgs e)
        {            
            String strMesIni = LeftRightMid.Right("00" + Convert.ToString(cboMes_Ini.Value), 2);
            String strMeFin = LeftRightMid.Right("00" + Convert.ToString(cboMes_Fin.Value), 2);
            Session["AnioMesIni"] = cboAnio_Ini.Value.ToString() + "" + strMesIni;
            Session["AnioMesFin"] = cboAnio_Fin.Value.ToString() + "" + strMeFin;
            Response.Redirect("~/Vehiculos/wFrmVentaExternaReporte.aspx?id="+ idNegocio);
        }
    }
}